package com.qiangesoft.blog.file.config;

import com.qiangesoft.blog.common.constants.Constants;
import com.qiangesoft.blog.file.enums.FileStoreTypeEnum;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 读取项目文件配置
 *
 * @author qiange
 */
@Component
@ConfigurationProperties(prefix = "file.store")
public class FileStoreConfig {
    /**
     * 项目名称
     */
    private FileStoreTypeEnum type = FileStoreTypeEnum.FILE_LOCAL;

    /**
     * nginx代理配置
     */
    private String nginxHost;

    /**
     * 本地配置
     */
    private final FileStoreConfig.LocalConfig localConfig = new FileStoreConfig.LocalConfig();

    /**
     * minio配置
     */
    private final FileStoreConfig.MinioConfig minioConfig = new FileStoreConfig.MinioConfig();

    public FileStoreTypeEnum getType() {
        return type;
    }

    public void setType(FileStoreTypeEnum type) {
        this.type = type;
    }

    public String getNginxHost() {
        if (nginxHost.endsWith(Constants.SLASH)) {
            return nginxHost;
        }
        return nginxHost + Constants.SLASH;
    }

    public void setNginxHost(String nginxHost) {
        this.nginxHost = nginxHost;
    }

    public LocalConfig getLocalConfig() {
        return localConfig;
    }

    public MinioConfig getMinioConfig() {
        return minioConfig;
    }

    /**
     * 本地配置
     */
    @Data
    public static class LocalConfig {

        /**
         * 路径
         */
        private String basePath;
    }

    /**
     * minio配置
     */
    @Data
    public static class MinioConfig {
        /**
         * 服务地址
         */
        private String endpoint;

        /**
         * 认证账户
         */
        private String accessKey;

        /**
         * 认证密码
         */
        private String secretKey;

        /**
         * 桶名称, 优先级最低
         */
        private String bucket;

        /**
         * 桶不在的时候是否新建桶
         */
        private boolean createBucket = true;

        /**
         * 启动的时候检查桶是否存在
         */
        private boolean checkBucket = true;

        /**
         * 设置HTTP连接、写入和读取超时。值为0意味着没有超时
         * HTTP连接超时，以毫秒为单位。
         */
        private long connectTimeout = 6000;

        /**
         * 设置HTTP连接、写入和读取超时。值为0意味着没有超时
         * HTTP写超时，以毫秒为单位。
         */
        private long writeTimeout = 2000;

        /**
         * 设置HTTP连接、写入和读取超时。值为0意味着没有超时
         * HTTP读取超时，以毫秒为单位。
         */
        private long readTimeout = 2000;

        /**
         * 有效期(默认为0，永久有效)
         */
        private long expires = 0l;
    }
}
